LVA Datenbanksysteme (LU 1.0 181.129)
Wintersemester 2005/2006
Gruppe A - Beispiel 2
Katalogversand
Lösen Sie die folgenden Probleme mittels SQL:
- Geben Sie für jeden einzelnen Artikel die Anzahl der
vorhandenen Serienstücke sowie den Preis aus. Beachten sie dabei,
dass dieser unter Umständen für die Ausgabe erst
ermäßigt werden muss.
(Anmerkung: der Preis eines Artikel mit beispielsweise 20%
Ermäßigung entspricht also 80% des Normalpreises!)
- Geben Sie für jede Filiale den Kunden (oder die Kunden) aus,
der bei ihr die meisten Bestellungen gemacht hat.
- Geben Sie die Bestellnummern aller Bestellungen aus, bei denen
die bestellten Stückzahlen aller Artikel in der jeweiligen
Filiale lagernd sind.
- Geben Sie die Bezeichnung jener Zahlungsart aus, mit der bisher
die meisten Bestellungen getätigt wurden.
- Geben Sie alle Artikel aus, von denen sich in mindestens 4
unterschiedlichen Filialen Serienstücke befinden.
- Geben Sie alle Paare von Personal-Mitarbeitern derselben Filiale
gemeinsam mit der positiven Differenz ihrer Gehälter aus.
(Anmerkung: Achten Sie darauf, dass jedes Paar nur einmal ausgegeben
werden soll!)
Lösen Sie die folgenden Probleme mittels PL/SQL:
(Anmerkung: Verwenden Sie, falls notwendig, die "transaction control"
Befehle COMMIT, ROLLBACK und SAVEPOINT!)
-
a) Schreiben Sie eine Funktion, die einen Artikel returniert
(=ausgibt) von welchem es aktuell die meisten Serienstücke gibt
und dessen Normalpreis zwischen 7 und 13 Euro liegt.
b) Weiters soll auch eine Funktion erstellt werden, die die niedrigste
freie Bestellnummer ermittelt und diese zurückliefert.
-
Schreiben Sie eine Prozedur die für alle Mitglieder automatisch
eine Bestellung tätigt, die seit dem als Parameter
übergebenen Datum nichts mehr bestellt haben.
Verwenden Sie zur Berechnung der Bestellnummer sowie zur Auswahl des
Artikels die Funktionen aus Aufgabe 7, wobei von dem ausgewählten
Artikel genau 1 Stück bestellt werden soll.
Für die Filiale sowie die Zahlungsart können der Einfachheit
halber jene mit der Nummer 1 gewählt werden, den Gesamtpreis
initialisieren Sie mit "0", dessen Berechnung erfolgt durch den Trigger
aus Beispiel 9.
(Anmerkung: die Funktion zur Auswahl des Artikels muss für jedes
betroffene Mitglied erneut aufgerufen werden, da sich nach jeder
erstellten Bestellung die Anzahl der vorhandenen Serienstücke
automatisch verringert (siehe Aufgabe 9)).
Falls kein passender Artikel mehr vorhanden ist, soll die Transaktion
zwar abgebrochen werden, alle bereits erstellten Bestellungen sollen
allerdings nicht mehr rückgängig gemacht werden. Sollte
dieser Fall bzw. diese Exception auftreten, soll außerdem ein
passende Fehlermeldung ausgegeben werden.
-
Schreiben Sie einen Trigger, der jedesmal ausgelöst wird, nachdem
ein Artikel einer Bestellung zugeordnet wurde.
Es soll nun der bisherige Gesamtpreis der Bestellung um den Preis
für die Stücke des Artikels erhöht werden und in der
Bestellung "upgedated" werden.
(Anmerkung: Achten Sie dabei auch auf eventuelle
Ermäßigungen für die einzelnen Artikel)
Mitglieder erhalten noch zusätzlich eine Ermäßigung von
5%.
(Anmerkung: bei Mitgliedern soll natürlich auch das Datum ihrer
letzten Bestellung entsprechend verändert werden!)
Um die Stückzahlen zu verringern, sollen außerdem in der
bestellten Anzahl Serienstücke des Artikels gelöscht werden.
(Anmerkung: der Einfachheit halber kann davon ausgegangen werden, dass
Artikeln nur dann Bestellungen zugeordnet werden wenn auch
Serienstücke in der bestellten Anzahl vorhanden sind, d.h. es ist
nicht nötig vor dem Löschen zu prüfen ob überhaupt
genügend Serienstücke vorhanden sind!)
(Tipp: erstellen sie am besten eine Prozedur (stored procedure) die all
diese Aufgaben übernimmt und einen Trigger der lediglich diese
Prozedur mit den benötigten Parametern (BestellNr, ArtikelNr,
Stückzahl) aufruft!)